跳到主要内容

点对点通信函数

当 ranks 需要发送和接收彼此之间的任意数据,而这些数据不能表示为广播或 allgather 时,即发送和接收的所有数据都不相同时,需要使用点对点通信原语。

mcclSend

mcclResult_t mcclSend(const void* sendbuff, size_t count, mcclDataType_t datatype, int peer, mcclComm_t comm, musaStream_t stream)

sendbuff 发送数据到 rank peer

rank peer 需要调用 mcclRecv,使用与此 rank 相同的 datatype 和相同的 count

此操作对 GPU 是阻塞的。如果需要并行完成多个 mcclSend()mcclRecv() 操作, 它们必须在 mcclGroupStart()/ mcclGroupEnd() 部分内融合。

相关链接:点对点通信

mcclRecv

mcclResult_t mcclRecv(void* recvbuff, size_t count, mcclDataType_t datatype, int peer, mcclComm_t comm, musaStream_t stream)

从 rank peer 接收数据到 recvbuff

rank peer 需要调用 mcclSend,使用与此 rank 相同的 datatype 和相同的 count

此操作对 GPU 是阻塞的。如果需要并行完成多个 mcclSend()mcclrecv() 操作, 必须将他们放在 mcclGroupStart()/ mcclGroupend() 区段内合并调用。

相关链接:点对点通信